Seznam.cz vykázal za rok 2025 tržby v celkové hodnotě 6,454 miliardy korun. Oproti roku 2024 nárůst o 3,68 %. Zisk před zdaněním oproti předcházejícímu roku poklesl, a to o 11,21 % na 1,330 miliardy korun. Vlastní velké jazykové modely SeLLMa najdou dnes uživatelé téměř na všech seznamáckých službách. Na všechny obsahové služby byla zavedena technologie text-to-speech, díky níž si mohou uživatelé přehrát články v audio verzi namluvené
… více »Vláda představila strategické digitalizační projekty. Roadmapa zahrnuje celkem 55 projektů napříč státní správou, z toho 22 prioritních projektů vycházejících přímo z programového prohlášení vlády a 33 projektů založených na platné legislativě. Portfolio pokrývá oblasti financí, zdravotnictví, digitální identity, dat, registrů, dopravy, krizového řízení, sociálních agend i kybernetické bezpečnosti.
Vyjádřeni Software Freedom Conservancy (SFC) k porušování licence AGPLv3 společností Bambu Lab v jejich softwaru Bambu Studio pro 3D tisk. Bambu Studio vychází z PrusaSliceru. Ten zase z Slic3ru. Spuštěn byl projekt baltobu, který kombinuje několik strategií pro řešení problému. SFC zastřeší vývoj svobodné náhrady proprietární knihovny libbambu_networking pomocí reverzního inženýrství a reimplementace, forku OrcaSliceru pro Bambu Lab tiskárny od Paweła Jarczaka a forku celého Bambu Studia pod názvem Viscose.
Správce souborů GNOME Commander (Wikipedie) byl přepsán do Rustu a vydán v nové verzi 2.0.0.
Sway (Wikipedie), dlaždicový (tiling) správce oken pro Wayland kompatibilní s i3, byl vydán ve verzi 1.12. Do vývoje se zapojilo 50 vývojářů. Přehled novinek na GitHubu. Sway 1.12 závisí na wlroots 0.20.0.
Papež Lev XIV. ve své první encyklice Magnifica Humanitas (Skvělé lidství), která se věnuje umělé inteligenci (AI), varoval před dezinformacemi, které AI manipulací s obsahem vytváří. Moc mají podle něj sociální sítě ovládané hrstkou soukromníků. Upozornil také roli digitálních platforem v obchodování s lidmi, které podle něj musí být uznáno jako současná forma otroctví. Papež se také poprvé omluvil za roli, kterou Vatikán sehrál při legitimizaci otroctví, a za to, že jej po staletí neodsoudil.
Český telekomunikační úřad zveřejnil Výroční zprávu za rok 2025 (pdf), která shrnuje jeho hlavní aktivity v oblasti regulace elektronických komunikací, poštovních služeb, digitálních služeb a přípravy na dohled nad umělou inteligencí. Součástí zprávy jsou také data o vývoji trhu, včetně pokračujícího růstu spotřeby mobilních dat a rozšiřování sítí nové generace. Celkový objem přenesených mobilních dat dosáhl v roce 2025 přibližně
… více »Tým sdružení CZ.NIC vyvíjející routovacího daemona BIRD oznámil vydání nových verzí 3.3.0 a 2.19.0. Ty přinášejí podporu pro EVPN/VXLAN a automatizaci BGP na základě router advertisementů. Více informací je k dispozici v archivu uživatelského mailing-listu.
Open source software pro úpravu digitálních fotografií LightZone (Wikipedie) byl vydán v nové verzi 5.0.0. LightZone je dnes k dispozici pod licencí BSD. Původně se jednalo o proprietární software vyvíjený společností Light Crafts. Ta v prosinci 2012 souhlasila s uvolněním zdrojových kódů jako open source [Wayback Machine].
Byla vydána verze 0.84 telnet a ssh klienta PuTTY (Wikipedie). Podrobnosti v přehledu nových vlastností a oprav chyb a Change Logu.
Programování je obvykle prosyceno zapisováním nějakých záhadných hodnot
do nějakých záhadných registrů, které pak způsobují záhadné chování.
Těch registrů je několik desítek, v každém registru je spousta bitů,
co něco dělají. Je to jediný způsob, jak ovládat periférie čipu
(časovače, čítače, řadič přerušení, komparátor, watchdog, sériový port,
sleep módy a mnoho dalších). Každý registr se nějak jmenuje a dokonce i každý
důležitý bit v něm se nějak jmenuje. Bity se nastavují na jedničky pomocí
funkce sbi() - set bit a nulují pomocí funkce
cbi() - clear bit. Takže například
sbi(FOO, BAR);
|
nastaví bit BAR v registru FOO. V dalším textu se zmíním pouze o několika základních, díky kterým lze používat sériový port (UART), nastavovat napětí na nějakém pinu (díky tomu lze rozsvítit připojenou LEDku), číst napěťovou úroveň na nějakém pinu (demonstrační příklad hlídá hladinu vody) a nakonfigurovat časovač s děličem frekvence a povolit přerušení (to se hodí při programování hodin reálného času).
Těch několik málo zde popsaných registrů a bitů v nich vám rozhodně nemůže k další práci stačit, takže vás odkazuji na dokumentaci k čipu, která je zde: DOC0839.PDF
Vězte, že bez této dokumentace není možné udělat téměř nic pořádně, takže si ji vytiskněte a najděte alespoň tři chyby. Těch 92 stran technického popisu dává tušit, že za svých 70 Kč jste si koupili zajímavý kus křemíku.
Programovat jednočipy je samozřejmě nejlepší ve strojovém kódu, assembleru, ale to nechme pro ostřílené elektroniky, kteří jsou nuceni nebo chtějí vymáčknout z dané technologie maximum. Psaní zdrojáku v jazyce C vám, myslím, přinese větší radost, i když je pak kód pomalejší a hlavně rozežranější.
Přejděme rovnou ke konkrétnímu příkladu. Typická ukázka toho, že čip žije, je blikání LEDky, takže zkuste připojit diodku mezi GND a pin č.8 (PD4). Do série s diodou zapojte odpor cca 220 Ohmů. Schéma tedy bude vypadat takto:
Zdroják, který by měl rozblikat LEDku, je zde:
#include <avr/io.h>
void delay(unsigned int ms) {
unsigned int i,j;
for ( j=0; j<1000; j++)
for ( i=0; i<ms; i++);
}
int main (void){
sbi(DDRD,PD4); /*enable port 5 for output*/
while (1) {
cbi (PORTD, PD4);
delay (500);
sbi (PORTD, PD4);
delay (500);
}
return 0;
}
|
Mezi každým rozsvícením a zhasnutím LEDky se provádí půl miliónu prázdných cyklů, jinak by dioda blikala pekelně rychle. Za zmínku stojí příkaz
sbi(DDRD,PD4);
|
který nastaví pin PD4 jako výstupní. Bližší informace viz dokumentace strana 56.
Pro kompilaci céčkovského zdrojáku a následné přeprogramování čipu se vám
může hodit následující Makefile. Makefile zpracovává céčkovský
zdroják s názvem helloworld.c, tak si to kdyžtak změňte.
MCU=at90s2313
CC=avr-gcc
OBJCOPY=avr-objcopy
PROJECT=helloworld
# optimize for size:
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes
-Os -mcall-prologues
#-------------------
all: $(PROJECT).hex
#-------------------
$(PROJECT).hex : $(PROJECT).out
$(OBJCOPY) -R .eeprom -O ihex $(PROJECT).out
$(PROJECT).hex
$(PROJECT).out : $(PROJECT).o
$(CC) $(CFLAGS) -o $(PROJECT).out -Wl,-Map,
$(PROJECT).map $(PROJECT).o
$(PROJECT).o : $(PROJECT).c
$(CC) $(CFLAGS) -Os -c $(PROJECT).c
asm : $(PROJECT).c
$(CC) $(CFLAGS) -O -S $(PROJECT).c
# you need to erase first before loading the program.
# load (program) the software into the eeprom:
load: $(PROJECT).hex
uisp -dlpt=/dev/parport0 --erase --upload
--verify if=$(PROJECT).hex -dprog=dapa -v=3 --hash=12
#-------------------
clean:
rm -f *.o *.map *.out *.hex
#-------------------
|
Spustíte li make load, zdrojový kód se zkompiluje, binárka
se rovnou naprogramuje do jednočipu a tam se ihned spustí.
Blikání diodky je sice hezké na koukání, ale moc informací to nenese. Daleko lepší je komunikace po sériovém portu. Obvod AT90S2313 obsahuje pro tyto účely rozhraní RS232 neboli UART. To sestává ze tří vývodů:
Nejjednodušší způsob vzájemného propojení dvou sériových portů je přivedení vysílacího drátu jednoho zařízení na přijímací pin druhého zařízení a naopak. Jde o zapojení křížem, takže RxD povede do TxD a naopak TxD povede do RxD. Zem zůstane zemí.
Bohužel to u jednočipů není tak jednoduché, protože jejich napěťové úrovně jsou jiné než u klasického sériového portu, který máte v počítači. Jednočipy pracují s úrovněmi 0V a cca 5V (podle napájecího napětí), zatímco standardní sériový port používá úrovně -12V a +12V.
Východiskem z této zdánlivě beznadějné situace je použití obvodu, který se postará o vzájemný převod napěťových úrovní. Pro tento účel lze použít např. notoricky známý MAX 232 CPE, kterých máte jistě doma po kotníky. Zmíněný obvod dokáže nejen napětí zmenšovat na požadovanou úroveň, ale i zvyšovat. Jestliže neznáte princip nábojové pumpy, považujte to klidně za perpetuum mobile v ceně třiceti korun.
A jestliže princip nábojové pumpy znáte, tak vás jistě nepřekvapí chomáč pěti elektrolytických kondenzátorů o kapacitě 1μF, kterým je nutno onen zázračný obvod obalit. Pokuste se tedy vše zapojit podle následujícího schématu:
Nyní je konstelace nakloněna tomu, aby bylo možné sestavit fenomenální projekt "Hello world.", který by měl na obrazovce vykouzlit jakýsi nápis. Jen si teď nemůžu vzpomenout, jaký nápis to má být. Zdrojový kód vypadá následovně:
#include <avr/io.h>
void print (char *string){
while (*string) {
loop_until_bit_is_set(USR, UDRE);
UDR = *string;
string++;
}
return;
}
int main(void) {
/* UART init */
sbi(UCR, TXEN);
sbi(UCR, RXEN);
UBRR = 59;
while (1) {
print ("Hello world.\n");
}
return 0;
}
|
Je načase pohlédnout do očí kruté pravdě - při programování jednočipů v Céčku nemáte k dispozici skoro nic z klasické knihovny libc. Sice existuje knihovna avr-libc, ale pokud můžete, vyhýbejte se tomu, protože paměti v čipu je zoufale málo. Takže i v mém příkladě jsem napsal funkci print(), aby byla malá, jednoduchá, škaredá a hloupá. Ve zmíněné funkci je řádek
loop_until_bit_is_set(USR, UDRE);
|
který zařídí čekání na vyprázdnění vysílacího bufferu, aby bylo možné poslat další byte. Vyprázdnění bufferu se pozná podle bitu UDRE (UART Data Register Empty) v registru USR (UART status register). Datový byte pro vysílání se pak zapíše do registru UDR (UART Data Register).
Jistě jste si všimli, že piny pro sériový port (RxD a TxD) jsou totéž co IO porty PD0 a PD1. Aby jednočip věděl, jakým způsobem má tyto vývody chápat, musí se mu to říct. Po zapnutí čipu jsou piny nakonfigurovány jako IO porty, jenže my chceme místo toho sériové rozhraní. Přepnutí se musí zařídít nastavením bitů TXEN (Transmit Enable) a RXEN (Receive Enable). Oba bity jsou v registru UCR (UART Control Register). Tím jsou vysvětleny ony dva tajemné řádky:
sbi(UCR, TXEN);
|
Zbývá ještě popsat nastavení přenosové rychlosti, baudu, která
je v tomto případě definována zapsáním čísla 59 do registru
UBRR (UART Baud Rate Register). Proč právě čísla 59? Baud rate
se spočítá podle vztahu
| Baud Rate | UBRR |
|---|---|
| 2400 | 239 |
| 4800 | 119 |
| 9600 | 59 |
| 14400 | 39 |
| 19200 | 29 |
| 28800 | 19 |
| 38400 | 14 |
| 57600 | 9 |
| 76800 | 7 |
| 115200 | 4 |
Tabulka platí pro frekvenci krystalu f=9.216 MHz.
Více informací o sériovém portu je v dokumentaci počínaje stranou 45.
Jak je patrné z tabulky, číslo 59 odpovídá přenosové rychlosti 9600 baudů. Tato přenosová rychlost byla zvolena proto, že je to defaultní nastavení sériového portu, takže na straně Linuxu nemusíte vůbec nic dělat, stačí rovnou číst.
Zkuste tedy program zkompilovat a nahrát do čipu pomocí
make load
|
A ze sériového portu by nyní měl vyhřeznout nekonečný proud nápisů
Hello world. Ze sériového portu můžete číst příkazem
cat /dev/ttyS0
|
případně
cat /dev/ttyS1
|
podle toho, na který port je čip připojený. Vřele doporučuji udělat si (jako root) symbolický link na to správné zařízení např. pomocí
ln -s /dev/ttyS0 /dev/jednocip
|
Dále se již na ten správný sériový port budu odkazovat jako na
/dev/jednocip.
Dalším příkladem nechť je ukázka, jak se zachází s piny coby vstupy. Předpokládejme, že chceme sestavit kontrolní systém, který upozorní na to, že se někde vylila voda, přišla povodeň, praskla hadice od pračky nebo něco podobného. Voda sice moc dobrý vodič není (ve srovnání s drátem), ale bude to stačit na to, aby se změnila napěťová úroveň na nějakém pinu.
Zapojení nechme stejné jako u "Hello world", přičemž zdrojový kód by mohl vypadat např. takto:
#include <avr/io.h>
void print (char *string){
while (*string) {
loop_until_bit_is_set(USR, UDRE);
UDR = *string;
string++;
}
return;
}
int main(void) {
/* UART init */
sbi(UCR, TXEN);
sbi(UCR, RXEN);
UBRR = 59;
cbi (DDRD, PD5); /*direction - DDR*/
sbi (PORTD, PD5); /* VALUE */
while (1) {
loop_until_bit_is_clear(PIND, PD5);
print ("Po nas at prijde potopa\n");
}
return 0;
}
|
Použijte obvyklé make load, v terminálu pustťe
cat /dev/jednocip a zkuste nasliněnými prsty šáhnout
na pin č.9 (PD5) a zároveň na zem (mám na mysli GND, nikoli podlahu).
Mělo by to vyhodit varování o stoupající hladině. Aby bylo dílo
dokonáno, lze využít krásné vlastnosti *nixových systémů a nechat si
poslat třeba mail poté, co přijde padesát varování:
head -n 50 /dev/jednocip > /dev/null && echo "Potopa" | mail $USER
|
Nemohu se nezmínit alespoň stručně o obsluze přerušení a jako příklad nechť je typická aplikace - měření času. Zde je kód na ukázku:
#include <avr/io.h>
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
void uart_putchar(char c) {
loop_until_bit_is_set (USR, UDRE);
UDR = c;
return;
}
SIGNAL (SIG_OVERFLOW0) {
static unsigned char count = 1;
outp (6, TCNT0); /* 9.216e6 / 1024 / 250 = 36,
takze dostaneme 36 preruseni
za vterinu. 256-250=6 */
count--;
if (count) return;
count = 36;
uart_putchar ('.');
uart_putchar ('\n');
}
int main(void) {
/* UART init */
sbi(UCR, TXEN);
sbi(UCR, RXEN);
UBRR = 59;
outp (5,TCCR0); /* Clock/1024 */
sbi (TIMSK, TOIE0); /*povol preruseni od casovace 0*/
sei(); /*povol preruseni globalne*/
while (1) {}
return 0;
}
|
Tiky krystalu jsou v čipu přivedeny do děliče frekvence (tzv. prescaler), který je pomocí instrukce
outp (5,TCCR0);
|
nastaven pro dělení 1024. Dělící konstanta pro časovač 0 se nastavuje
pomocí registru TCCR0, viz dokumentace na straně 27.
Takže na výstupu děliče je nyní frekvence
9.216 MHz / 1024 = 9000 Hz. Tato frekvence je přivedena do osmibitového
časovače 0 a ten je nastaven tak, aby při každém přetečení generoval přerušení.
To zajistí bit TOIE0 v registru TIMSK. Přerušení se navíc musí povolit
globálně funkcí sei().
Čítač čítá vzestupně, takže chceme-li generovat přerušení každých 250 cyklů,
je potřeba jej při každém přerušení nastavit na hodnotu 256-250=6 (slovy šest). Těmito magickými čísly, která jsem dlouho vypiplával, se docílí toho,
že se přerušení vyvolá
36 krát za sekundu. V obslužné rutině je tudíž potřeba čítat do šestatřiceti,
a pak tedy víme, že uplynula sekunda.
Každou sekundu jednočip pošle na sériový port tečku "." a odentruje. Přesnost hodin můžete snadno ověřit pomocí
$ head -n 2 /dev/jednocip > /dev/null && time \ cat /dev/jednocip | head -n 59 > /dev/null real 1m0.000s user 0m0.000s sys 0m0.000s |
Je to možná trochu krkolomné, ale funguje to.
To není podvod - příkaz time opravdu naměřil přesně jednu minutu
nachlup, sám se tomu divím.
Na závěr přikládám několik fotografií, jejichž cílem je doložit, že je celkem normální stav, když dílo vypadá jako nepřehledný chumáč drátů. Kliknutím se fotky zvětší na obří velikost.
Připravte se na to, že programování v součinnosti s elektronikou s sebou přináší daleko více chyb, než jste dosud poznali.
Přeji mnoho euforických zážitků.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
To AMD bude Flash EPROM, Hyundai bude SRAM.
Soucasne mobily budou asi nepouzitelne, protoze to bude hrube integrovane reseni se dvema-tremi cipy, a program pro procesor bude zrejme ROM nebo OTP, a primo na stejnem cipu jako CPU.
Celkem bomba, kdyz si uvedomim ze ten Philips je min nez 1x1cm brouk, a je to 2x rychlejsi nez Amiga1200
. JZitra si tu briketku rozeberu a omrknu a u toho asi i zkoncim. Spis si nekdy koncem unora zkusim pohrat se starou Nokiou, kabelem a Gammu a rozjet GSM branu, to bude o poznani uzitecnejsi
.
Ad. odpajování z desek.
Budete potřebovat: plynový sporák, nebo alespoň lihový kahan, kombinačky u nichž vám nevadí, že se mírně opálí, solidní pinzetu, možná plochý malý šroubovák, smeták, hadr, leštěnku na sporák, pokud používáte domácí rodinný a velmi dobré větrání v kuchyni
Nedávno jsem udělal docela zajímavou zkušenost. Měl jsem a ještě mám nějaké starší desky, takový ten elektronický šrot (nějaké ISA karty, zákl. desky a pod.). Bylo mi líto desky vyhodit rovnou, protože mne zaujalo pár potenciálně použitelných čipů a krom toho působím v neziskovce, kde se v rámci kroužku elektroniky využijí i další součástky, poněvač na nové je málo peněz. Po pár experimentech se ukázalo, že většinu součástek lze sundat vcelku snadno (a většinu zcela nepoškozených) na obyčejném plynovém sporáku (doporučuji malý hořák a spíše menší plamen).
Má to ale několik rizik/nepříjemností:
- strašlivě to smrdí, pokud desku necháte nahřívat déle, nedoporučuje se provozovat doma se špatným větráním
- zničíte desku, nehodí se pro desky, které chcete zároveň zachránit
- nehodí se na kuprexit, nebo jak se jmenuje takový ten spíše papírový materiál, já jsem to testoval na deskách z materiálu co se vyskytuje v PC a spíše připomíná sklolaminát, takže je jednoznačně tepelně odolnější
- některé desky mají tendenci se nafouknout a občas vyprsknou, rozhodně doporučuji brýle
- pozor na elektrolytické kondenzátory, kdybyste je nevyndali a zahřívali velmi dlouho, mohou vybuchnout
- zničíte vše co je z druhé/spodní strany, takže třeba SMD led, které mívají mobily je vhodné odpájet předem, aby spodní strana byla opravdu bez součástek
- budete muset po kuchyni uklízet spousty malých cínových kuliček a smd součástek, které zapadly mimo
- elektrolitycký kondenzátor objevený až při pečení, zapadlý v troubě, dokáže znepříjemnit celý den 
- pozor na součástky, které mají kovový obal, chladič a nebo jsou přišroubované
A výhody?
+ sundáte i chipset pro Pentia a to z velké části s netknutými cínovými nožičkami, které se dost rychle roztaví, povedlo se mi vyndat i socket 370 a nebo ISA sběrnici, ale to chce už docela cvik
+ součástky tím dle mého názoru trpí výrazně méně, než jinými metodami, zahřívají se relativně krátce ačkoliv celé
+ součástky sundáte klepnutím desky třeba o papírovou krabici, kam se to celé sype k dalšímu třídění
+ pasivní součástky jako SMD rezistory, kondenzátory a podobně získáváte tak nějak mimochodem, protože se většinou vysypou při vyndavání těch vícenožičkových, aniž byste jim museli věnovat další pozornost
+ nebudete potřebovat drahou pájecí stanici, nebo cínovou vanu a jiné záležitosti, které se doma většinou nevyskytují, pokud máte, netřeba se touto metodou zabývat
+ tímhle způsobem lze získat součástky, které tak lehce nekoupíte samostatně, ale přitom se vyskytují na kdejakém vyřazeném boardu pro PC, kartě portů a podobně.
... NA VLASTNÍ RIZIKO, ale funguje to
Tohle už nechápu....
--vo
. Stejne je asi lepsi, kdyz ten kondenzator
bude hodne blizko procesoru.
(
#include "avr/io.h"
void delay(unsigned int ms) {
unsigned int i,j;
for ( j=0; j<1000; j++)
for ( i=0; i< ms ; i++);
}
void blink( unsigned int howmany ){
unsigned int i,j;
cbi (PORTD, PD4);
delay(500);
for(j=0;j<3;j++){
for( i=0; i< howmany; i++){
sbi (PORTD, PD4);
delay (150);
cbi (PORTD, PD4);
delay(90);
}
delay(1000);
}
}
int main (void){
unsigned int i = 0;
sbi(DDRD,PD4); /*enable port 5 for output*/
cbi(DDRD,PD5);
sbi(PORTD,PD5); /* input = button */
while (1) {
do {
i++;
} while (bit_is_clear(PIND,PD5) == 0);
blink(i%6+1);
sbi(PORTD,PD4);
i=0;
}
return 0;
}
(P.S. Nesmi tam byt mezera samozrejme...)
$(PROJECT).out : $(PROJECT).o $(CC)je pred $(CC) tabelator a nie medzery
AVR Direct Parallel Access succeeded after 0 retries. Vendor Code: 0x00 Part Family: 0x01 Part Number: 0x02 Cannot identify device because it is locked. Device similar to the ATmega103-old is found. Page Write Disabled FLASH Write Delay (t_wd_flash): 61111 us EEPROM Write Delay (t_wd_eeprom): 11111 us Erasing device ... Reinitializing device AVR Direct Parallel Access succeeded after 0 retries. Vendor Code: 0x00 Part Family: 0x01 Part Number: 0x02 Cannot identify device because it is locked. Device similar to the ATmega103-old is found. Page Write Disabled FLASH Write Delay (t_wd_flash): 61111 us EEPROM Write Delay (t_wd_eeprom): 11111 us Uploading: flash #Device is locked. make: *** [load] Neúspěšně ukončen (SIGABRT)Kdyz odpojim ledku od pinu 8, tak se tahle chyba neobjeví.
real 1m0.003s
user 0m0.001s
sys 0m0.003s
pat pat # make load
/opt/cdk4avr/bin/avr-gcc -g -mmcu=at90s2313 -Wall -Wstrict-prototypes -Os -mcall-prologues -o helloworld.out -Wl,-Map,
/opt/cdk4avr/lib/gcc/avr/3.4.5/../../../../avr/bin/ld: cannot open map file : není souborem ani adresářem
make: *** [helloworld.out] Error 1